package smallfrench.moteur.noeuds;

import smallfrench.moteur.interp.Portee;
import smallfrench.moteur.interp.RObjet;
import smallfrench.moteur.interp.err.RException;
import smallfrench.moteur.lexer.lexemes.Lexeme;

/**
 * Un noeud identificateur (nom de variable).
 * @author antoine1023
 */
public class NIdentificateur extends Noeud implements Assignable {

	public final String nom;

	public NIdentificateur(Lexeme t, String nom) {
		super(t);
		this.nom = nom;
	}

	@Override
	public RObjet evaluer(Portee portee) {
		try {
			return portee.getVariable(nom);
		} catch (RException e) {
			e.empilerPosition(lexeme.debut);
			throw e;
		}
	}

	@Override
	public void assigner(RObjet newValue, Portee portee) {
		try {
			portee.setVariable(nom, newValue);
		} catch (RException e) {
			e.empilerPosition(lexeme.debut);
			throw e;
		}
	}

	@Override
	public String toString() {
		return nom;
	}
}
